package com.zsqat.eshop.gateway.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

// 配置跨域，该类用来做过滤，允许所有的请求跨域
@Configuration
public class eShopCorsConfiguration {
  @Bean
  public CorsWebFilter corsWebFilter(){
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration corsConfig = new CorsConfiguration();
    // 允许访问的头信息,*表示全部
    corsConfig.addAllowedHeader("*");
    // 允许提交请求的方法，*表示全部允许
    corsConfig.addAllowedMethod("*");
    // 允许向该服务器提交请求的URI，*表示全部允许，在SpringMVC中，如果设成*，会自动转成当前请求头中的Origin
    corsConfig.addAllowedOrigin("*");
    // 允许cookies跨域
    corsConfig.setAllowCredentials(true);

    source.registerCorsConfiguration("/**", corsConfig);
    return new CorsWebFilter(source);
  }
}

/*
   跨域：指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的，是浏览器JavaScript加的安全限制。
   同源策略：是指协议、域名、端口都要相同，其中有一个不同都产生跨域；
   服务器返回超过一个 Access-Control-Allow-Origin 标头信息，就会报错(原因：不允许有多个 'Access-Control-Allow-Origin' CORS 头)。
   解决：因为eshop-admin中也配置了过滤器解决跨域，在此屏蔽eshop-admin配置的解决跨域的过滤器。
        当然如果使用nginx，nginx也不能配置 Access-Control-Allow-Origin:*
*/
